/**
 * Generali Solutions d'assurances - Tous droits réservés &copy; 2007 - 2010
 */
package fr.generali.accueilclient.client.assembler.input;

import java.math.BigInteger;

import org.springframework.core.convert.converter.Converter;
import org.springframework.stereotype.Component;

import fr.generali.accueilclient.client.om.IAdresse;
import fr.generali.accueilclient.client.om.IContact;
import fr.generali.accueilclient.client.om.ICoordonneeBancaire;
import fr.generali.accueilclient.client.om.IEmail;
import fr.generali.accueilclient.client.om.ILien;
import fr.generali.accueilclient.client.om.IPersonne;
import fr.generali.accueilclient.client.om.IPieceIdentite;
import fr.generali.accueilclient.client.om.ISiteInternet;
import fr.generali.accueilclient.client.om.ITelephone;
import fr.generali.refservcommuns.rce.desactivation.dtodesactivation.DtoDesactivationAdresse;
import fr.generali.refservcommuns.rce.desactivation.dtodesactivation.DtoDesactivationContact;
import fr.generali.refservcommuns.rce.desactivation.dtodesactivation.DtoDesactivationDocument;
import fr.generali.refservcommuns.rce.desactivation.dtodesactivation.DtoDesactivationDonneesBancaires;
import fr.generali.refservcommuns.rce.desactivation.dtodesactivation.DtoDesactivationLienPersonne;
import fr.generali.refservcommuns.rce.desactivation.dtodesactivation.DtoDossierP18;
import fr.generali.refservcommuns.rce.desactivation.dtodesactivation.DtoListeDossierP18;
import fr.generali.refservcommuns.rce.desactivation.desactivationservice.Desactivation;

/**
 * @author selrhazala
 */
@Component("contactToDesactivationContactConverter")
public class ContactToDesactivationContactConverter implements Converter<IContact, Desactivation> {

    /**
     * {@inheritDoc}
     */
    public Desactivation convert(IContact input) {
        Desactivation desactivContact = null;

        if (input != null) {
            IPersonne client = input.getClient();
            desactivContact = new Desactivation();

            DtoListeDossierP18 listDossierP18 = new DtoListeDossierP18();
            DtoDossierP18 dtoDossierP18 = new DtoDossierP18();
            dtoDossierP18.setCodeUser("BC");
            // dtoDossierP18.getIdentifiantPersonne().add(client.getNumeroClient());

            // Desactivation de l'adresse
            if (input.getAdresse() != null) {
                IAdresse adrContact = input.getAdresse();

                DtoDesactivationAdresse dtoDesactivationAdresse = new DtoDesactivationAdresse();
                dtoDesactivationAdresse.setIdentifiantAdresse(adrContact.getIdentifiant());
                dtoDesactivationAdresse.setMotifDesactivation("01");
                dtoDesactivationAdresse.setIdentifiantPersonne(client.getNumeroClient());

                dtoDossierP18.getDesactivationAdresse().add(dtoDesactivationAdresse);
                listDossierP18.getDossierP18().add(dtoDossierP18);
            }

            // Desactivation du téléphone
            if (input.getTelephone() != null) {
                ITelephone telContact = input.getTelephone();

                DtoDesactivationContact dtoDesactivationContact = new DtoDesactivationContact();

                if (telContact.getNumOrdre() != null) {
                    BigInteger bNumeroOrdreTel = new BigInteger(telContact.getNumOrdre());
                    dtoDesactivationContact.setNumeroOrdre(bNumeroOrdreTel);
                }

                dtoDesactivationContact.setTypeContact("P");
                dtoDesactivationContact.setMotifDesactivation("01");
                dtoDesactivationContact.setIdentifiantPersonne(client.getNumeroClient());

                dtoDossierP18.getDesactivationContact().add(dtoDesactivationContact);
                listDossierP18.getDossierP18().add(dtoDossierP18);
            }

            // Desactivation de l'email
            if (input.getMail() != null) {
                IEmail emailContact = input.getMail();

                DtoDesactivationContact dtoDesactivationContact = new DtoDesactivationContact();

                if (emailContact.getNumOrdre() != null) {
                    BigInteger bNumeroOrdreEmail = new BigInteger(emailContact.getNumOrdre());
                    dtoDesactivationContact.setNumeroOrdre(bNumeroOrdreEmail);
                }

                dtoDesactivationContact.setTypeContact("E");
                dtoDesactivationContact.setMotifDesactivation("01");
                dtoDesactivationContact.setIdentifiantPersonne(client.getNumeroClient());

                dtoDossierP18.getDesactivationContact().add(dtoDesactivationContact);
                listDossierP18.getDossierP18().add(dtoDossierP18);
            }

            // Desactivation du rib
            if (input.getCoordonneeBancaire() != null) {
                ICoordonneeBancaire ribContact = input.getCoordonneeBancaire();

                DtoDesactivationDonneesBancaires dtoDesactivationDonneesBancaires =
                                new DtoDesactivationDonneesBancaires();
                dtoDesactivationDonneesBancaires.setIdentifiantDonneesbancaires(ribContact.getIdentifiant());
                dtoDesactivationDonneesBancaires.setMotifDesactivation("01");
                dtoDesactivationDonneesBancaires.setIdentifiantPersonne(client.getNumeroClient());

                dtoDossierP18.getDesactivationDonneesBancaires().add(dtoDesactivationDonneesBancaires);
                listDossierP18.getDossierP18().add(dtoDossierP18);
            }

            // Desactivation du site internet
            if (input.getSiteInternet() != null) {
                ISiteInternet webContact = input.getSiteInternet();

                DtoDesactivationContact dtoDesactivationContact = new DtoDesactivationContact();

                if (webContact.getNumOrdre() != null) {
                    BigInteger bNumeroOrdreEmail = new BigInteger(webContact.getNumOrdre());
                    dtoDesactivationContact.setNumeroOrdre(bNumeroOrdreEmail);
                }

                dtoDesactivationContact.setTypeContact("W");
                dtoDesactivationContact.setMotifDesactivation("01");
                dtoDesactivationContact.setIdentifiantPersonne(client.getNumeroClient());

                dtoDossierP18.getDesactivationContact().add(dtoDesactivationContact);
                listDossierP18.getDossierP18().add(dtoDossierP18);
            }

            // Desactivation de la pièce d'identité
            if (input.getPieceIdentite() != null) {
                IPieceIdentite pieceIdContact = input.getPieceIdentite();

                DtoDesactivationDocument dtoDesactivationDocument = new DtoDesactivationDocument();
                dtoDesactivationDocument.setTypeDocument(pieceIdContact.getType());
                dtoDesactivationDocument.setCategoriePermisConduire(pieceIdContact.getCategorie());
                dtoDesactivationDocument.setNumeroDocument(pieceIdContact.getNumero());
                dtoDesactivationDocument.setIdentifiantPersonne(client.getNumeroClient());

                dtoDossierP18.getDesactivationDocument().add(dtoDesactivationDocument);
                listDossierP18.getDossierP18().add(dtoDossierP18);
            }

            // Desactivation d'un lien
            if (input.getLien() != null) {
                ILien lien = input.getLien();

                DtoDesactivationLienPersonne dtoDesactivationLienPersonne = new DtoDesactivationLienPersonne();
                dtoDesactivationLienPersonne.setIdentifiantCible(lien.getPersonneLiee().getNumeroClient());
                dtoDesactivationLienPersonne.setIdentifiantOrigine(client.getNumeroClient());
                dtoDesactivationLienPersonne.setTypeLien(lien.getRole1());

                dtoDossierP18.getDesactivationLienpersonne().add(dtoDesactivationLienPersonne);
                listDossierP18.getDossierP18().add(dtoDossierP18);
            }

            desactivContact.setDtoListeDossierP18(listDossierP18);
        }

        return desactivContact;
    }

}
